031114 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

作品置き場

作品置き場

文字列を利用した演算(評価過程)

・let n = 10 in if n <= 0 then 1 else n - 2


expval (Let ([Decl "n" (Num "10")]) (If (Rexpr LessEq (Var "n") (Num "0"))(Num "1", Bexpr Minus (Var "n") (Num "2")))) none

= expval (If (Rexpr LessEq (Var "n") (Num "0"))(Num "1", Bexpr Minus (Var "n") (Num "2"))) (recdecl ([Decl "n" (Num "10")]) none)

| v = expval (Num "1") (recdecl ([Decl "n" (Num "10")]) none)

| otherwise = expval (Bexpr Minus (Var "n") (Num "2")) (recdecl ([Decl "n" (Num "10")]) none)

where

V_Bool v = expval (Rexpr LessEq (Var "n") (Num "0")) (recdecl ([Decl "n" (Num "10")]) none)

= V_Bool (relopr LessEq v v') =

where

V_Int v = expval (Var "n") (recdecl ([Decl "n" (Num "10")]) none)

= lookup1 (recdecl ([Decl "n" (Num "10")]) none) "n"

= (recdecl ([Decl "n" (Num "10")]) none) "n"

= (foldl declenv' "n" ([Decl "n" (Num "10")]))

declenv' "n" ([Decl "n" (Num "10")]) = declenv ([Decl "n" (Num "10")]) "n" "n"

= update "n" "n" (expval (Num "10")) "n"

= update "n" "n" (V_Int 10)

= V_Int 10

= foldl (V_Int 10)

=V_Int 10



V_Int v' = expval (Num "0") (recdecl ([Decl "n" (Num "10")]) none)

= V_Int (Numval "0")

= V_Int 0

= V_Bool (relopr LessEq 10 0)

= 10(<=)0 = V_Bool False

=expval (Bexpr Minus (Var "n") (Num "2")) (recdecl ([Decl "n" (Num "10")]) none)

=V_Int (binopr Minus v v')

where

V_Int v = expval (Var "n") (recdecl ([Decl "n" (Num "10")]) none)

= lookup1 (recdecl ([Decl "n" (Num "10")]) none) "n"

= (recdecl ([Decl "n" (Num "10")]) none) "n"

=(foldl declenv' "n" ([Decl "n" (Num "10")]))

declenv' "n" ([Decl "n" (Num "10")]) = declenv ([Decl "n" (Num "10")]) "n" "n"

= update "n" "n" (expval (Num "10")) "n"

= update "n" "n" (V_Int 10)

= V_Int 10

= foldl (V_Int 10)

=V_Int 10

V_Int v' = expval (Num "2") (recdecl ([Decl "n" (Num "10")]) none)

= V_Int (numval "2")

= V_Int 2

=V_Int (binopr Minus (10) (2))

=V_Int ((10)(-)(2))

=V_Int 8



© Rakuten Group, Inc.